package crud

import "gorm.io/gorm"

// CRUD 通用接口
type CRUD[T any] struct {
	DB *gorm.DB
}

// NewCRUD 创建 CRUD 实例
func NewCRUD[T any](db *gorm.DB) *CRUD[T] {
	return &CRUD[T]{DB: db}
}

// Create 创建记录
func (c *CRUD[T]) Create(model *T) error {
	return c.DB.Create(model).Error
}

// GetByID 根据 ID 查询
func (c *CRUD[T]) GetByID(id any) (*T, error) {
	var model T
	err := c.DB.First(&model, id).Error
	return &model, err
}

// GetAll 获取所有记录
func (c *CRUD[T]) GetAll() ([]T, error) {
	var models []T
	err := c.DB.Find(&models).Error
	return models, err
}

// Update 更新记录
func (c *CRUD[T]) Update(model *T) error {
	return c.DB.Save(model).Error
}

// DeleteByID 根据 ID 删除
func (c *CRUD[T]) DeleteByID(id any) error {
	return c.DB.Delete(new(T), id).Error
}
